import { parse } from './parser/index'
import { optimize } from './optimizer'
import { generate } from './codegen/index'
import { createCompilerCreator } from './create-compiler'
import { CompilerOptions, CompiledResult } from 'types/compiler'

// `createCompilerCreator` allows creating compilers that use alternative
// parser/optimizer/codegen, e.g the SSR optimizing compiler.
// Here we just export a default compiler using the default parts.
//‘ createCompilerCreator ’允许创建使用替代解析器/优化器/代码根的编译器，例如SSR优化编译器。
// 这里我们只是使用默认部分导出一个默认编译器。
/**
 * 使用createCompilerCreator创建一个默认的编译器
 * createCompilerCreator允许创建使用替代解析器/优化器/代码生成器的编译器
 * 例如，用于服务器端渲染（SSR）优化的编译器
 */
export const createCompiler = createCompilerCreator(function baseCompile(
  template: string, // 模板字符串，Vue组件的模板部分
  options: CompilerOptions // 编译器选项，用于自定义编译行为
): CompiledResult {
  // 解析模板字符串为AST
  const ast = parse(template.trim(), options)
  if (options.optimize !== false) {
    optimize(ast, options)  // 如果未禁用优化，则对AST进行优化
  }
    // 将优化后的AST转换为渲染函数代码
  const code = generate(ast, options)
 // 返回编译结果，包含AST、渲染函数和静态渲染函数数组
 return {
  ast, // 抽象语法树，用于调试或其他目的
  render: code.render, // 渲染函数，用于生成和更新虚拟DOM
  staticRenderFns: code.staticRenderFns // 静态渲染函数数组，用于渲染不依赖组件状态的静态内容
};
})
